/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Logica;

import Proxy.IOException_Exception;
import Proxy.JDOMException_Exception;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.StringReader;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

/**
 *
 * @author Moraima Joves
 */
public class Respaldo {

    private String ruta = "C:/Aplicaciones/DistribuidoChama/ServidorCentral/conf/Datos.xml";
    
    /**
     * Metodo que envia al servidor los datos para ser respaldado
     * @throws IOException_Exception
     * @throws JDOMException_Exception 
     */
    public void Respaldar() throws IOException_Exception, JDOMException_Exception{
        try {
            Document docNuevo = new Document();  
            Element eRaiz = new Element("raiz"); 
            SAXBuilder builder = new SAXBuilder();
            Document result = builder.build(new FileInputStream(ruta));  
          
            Element raiz = result.getRootElement(); 
            raiz.detach();
            List<Element> hijosRaiz = raiz.getChildren("bebe"); 
            for (Element elemento : hijosRaiz) {  
                
                Element nodo = new Element("bebe");
                nodo.addContent(new Element("apellido").setText(elemento.getChild("apellido").getValue()));
                nodo.addContent(new Element("nombre").setText(elemento.getChild("nombre").getValue()));
                nodo.addContent(new Element("cedulaPapa").setText(elemento.getChild("cedulaPapa").getValue()));
                nodo.addContent(new Element("idbebe").setText(elemento.getChild("idbebe").getValue()));            
                nodo.addContent(new Element("fechaNacimiento").setText(elemento.getChild("fechaNacimiento").getValue()));

                eRaiz.addContent(nodo);
            }
            result = builder.build(new FileInputStream(ruta));  
            raiz = result.getRootElement(); 
            raiz.detach();
            hijosRaiz = raiz.getChildren("usuario"); 
            for (Element elemento : hijosRaiz) {  
                Element nodo = new Element("usuario");
                nodo.addContent(new Element("login").setText(elemento.getChild("login").getValue()));
                nodo.addContent(new Element("password").setText(elemento.getChild("password").getValue()));

                eRaiz.addContent(nodo);
            }
            result = builder.build(new FileInputStream(ruta));  
            raiz = result.getRootElement(); 
            raiz.detach();
            hijosRaiz = raiz.getChildren("consulta"); 
            for (Element elemento : hijosRaiz) {  
                Element nodo = new Element("consulta");
                nodo.addContent(new Element("id").setText(elemento.getChild("id").getValue()));
                nodo.addContent(new Element("fechaConsulta").setText(elemento.getChild("fechaConsulta").getValue()));
                nodo.addContent(new Element("peso").setText(elemento.getChild("peso").getValue()));
                nodo.addContent(new Element("estatura").setText(elemento.getChild("estatura").getValue()));            
                nodo.addContent(new Element("idbebe").setText(elemento.getChild("idbebe").getValue()));
                nodo.addContent(new Element("circunferencia").setText(elemento.getChild("circunferencia").getValue()));

                eRaiz.addContent(nodo);
            }
            
            docNuevo.addContent(eRaiz);  
            Format format = Format.getPrettyFormat();  
            XMLOutputter xmloutputter = new XMLOutputter(format);
            
            String docNuevoStr = xmloutputter.outputString(docNuevo); 
            Proxy.Respaldo_Service service = new Proxy.Respaldo_Service();
            Proxy.Respaldo port = service.getRespaldoPort();
            port.respaldar(docNuevoStr);
            
        } catch (JDOMException ex) {
            
        } catch (IOException ex) {
            
        }
    }
    
    /**
     * Metodo que obtiene la lista de respaldos que se encuentran en el servidor
     */
    public List<String> ObtenerListaRespaldo(){
        
        Proxy.Respaldo_Service service = new Proxy.Respaldo_Service();
        Proxy.Respaldo port = service.getRespaldoPort();
        return port.obtenerListaRespaldo();
    }
    
    /**
     * Metodo que aplica el respaldo seleccionado
     * @param nombre 
     */
    public void AplicarRespaldo(String nombre){
        try {
            Proxy.Respaldo_Service service = new Proxy.Respaldo_Service();
            Proxy.Respaldo port = service.getRespaldoPort();
            String xml = port.obtenerRespaldo(nombre);
            /*guardamos los cambios*/
            SAXBuilder builder = new SAXBuilder();
            Document result = builder.build(new StringReader(xml));
            XMLOutputter xml_out=new XMLOutputter();
            File fil = new File(ruta);
            FileOutputStream file_os = new FileOutputStream(fil);
            xml_out.output(result,file_os);
            file_os.close();
        } catch (Exception e) {
        }
    }
}
